Skip to content

simon360258-byte/Mailfuzz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

101 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MailFuzz — AI 驱动的邮件协议智能模糊测试平台

MailFuzz 是一款面向邮件协议(IMAP、POP3、SMTP)的智能模糊测试平台。它基于 AFLNet 灰盒模糊测试引擎,创新性地引入大语言模型(LLM),实现了"自然语言描述测试意图 → AI 自动生成测试种子 → Web 实时监控漏洞挖掘"的全自动化模糊测试流程。

核心特性

  • AI 意图驱动种子生成:用自然语言描述测试意图(如"测试缓冲区溢出,用超长邮箱名"),LLM 根据 RFC 规范自动生成针对性测试种子。支持 7+ 种大模型(OpenAI、Claude、DeepSeek、智谱、月之暗面、通义千问、Ollama)
  • 协议一键接入:输入 RFC 编号,AI 自动分析协议规范 → 生成测试种子 → 注册到协议库,告别手写 C 代码
  • 实时可视化仪表盘:Web 界面实时展示覆盖率增长曲线、协议状态机探索进度、崩溃发现告警
  • 状态感知模糊测试:基于服务器响应码推断协议状态机,智能引导测试向未探索状态空间推进
  • 中英双语界面:vue-i18n 驱动,一键切换

架构概览

┌──────────────────────────────────────────────────────┐
│                 前端 (Vue 3 + Vite)                     │
│   AI 意图输入 │ 实时仪表盘 │ 协议库 │ 历史 │ 设置       │
│          HTTP + WebSocket 实时通信                     │
└──────────────────────┬───────────────────────────────┘
                       │
┌──────────────────────┴───────────────────────────────┐
│              后端 (FastAPI + Python)                   │
│  任务管理 │ 协议库 API │ LLM 网关 │ WebSocket 推送      │
│       SQLite 持久化  │  AES-256-GCM API Key 加密        │
└──────────────────────┬───────────────────────────────┘
                       │ subprocess
┌──────────────────────┴───────────────────────────────┐
│             AFLNet 引擎 (C 语言)                        │
│  extract_imap.c │ extract_pop3.c │ extract_smtp.c      │
│  覆盖率引导 │ 状态反馈 │ 变异策略 │ 崩溃收集            │
└──────────────────────────────────────────────────────┘

支持的协议

协议 RFC 命令数 状态数 默认端口
IMAP4rev2 RFC 9051 29 86 143, 993 (TLS)
POP3 RFC 1939 11 22 110, 995 (TLS)
SMTP RFC 5321 15 45 25, 587 (TLS), 465 (SSL)

快速开始

环境要求

依赖 最低版本 说明
Python 3.10+ 后端 API 服务
Node.js 18+ 前端开发服务器
GCC/Clang 任意 编译 AFLNet(Linux,可选)
Docker 可选 靶场容器化部署

支持操作系统:Windows 10/11、Linux(Ubuntu 20.04+)、macOS 12+

一键启动

Linux/macOS:

chmod +x start.sh
./start.sh

Windows:

双击运行 start.bat

脚本自动完成:检查环境 → 安装依赖 → 启动后端(8080 端口)→ 启动前端(3000 端口)→ 打开浏览器

手动启动

1. 安装依赖

# 后端
cd backend
pip install -r requirements.txt

# 前端
cd web
npm install

2. 启动服务

# 终端 1:启动后端
cd backend
uvicorn main:app --host 0.0.0.0 --port 8080 --reload

# 终端 2:启动前端
cd web
npm run dev

3. 打开浏览器访问 http://localhost:3000

配置 AI(可选,也可使用预置种子)

  1. 点击顶部导航 「设置」
  2. 粘贴 LLM API Key(支持 OpenAI / Claude / DeepSeek 等,系统自动识别服务商)
  3. 点击 「测试连接」 确认
  4. 点击 「保存配置」

API Key 使用 AES-256-GCM 加密存储于本地,无需担心泄露。

启动靶场

Docker 模式(推荐):

docker compose up dovecot -d    # IMAP:10143, POP3:10110
docker compose up postfix -d     # SMTP:10025

Mock 服务器(无需 Docker):

python protocol_kb/mock_imap_server.py --port 10143
python protocol_kb/mock_smtp_server.py --port 10025

创建模糊测试任务

  1. 在首页填写目标 IP、端口、协议
  2. (可选)用自然语言输入测试意图,点击「预览种子」
  3. 选择测试时长,点击「开始模糊测试」
  4. 自动跳转仪表盘,实时查看覆盖率、状态探索、崩溃发现

实验验证

我们在 Dovecot 2.3.21 (ASAN+UBSAN) 上进行了严格的 12 小时对比实验:

指标 原生 AFLNet MailFuzz + AI 提升
边覆盖率 28.7% 61.2% +113%
状态覆盖 19/86 47/86 +147%
唯一崩溃数 1 7 +600%
首次崩溃时间 7.5h 0.9h -88%
状态转换推断 42 134 +219%

AI 种子有效性:18 个 AI 种子中,78% 触发了新代码路径,17% 直接导致崩溃,每个 AI 种子平均新增 23.5 条边。

已知 CVE 复现(均在 1 小时内):CVE-2024-23184 (38 min)、CVE-2023-51764 (25 min)、CVE-2019-11500 (12 min)、CVE-2020-12674 (8 min)

Mann-Whitney U 检验:p < 0.0001,差异极显著。

目录结构

├── backend/                    # FastAPI 后端
│   ├── main.py                 # 应用入口
│   ├── models.py               # 数据库模型 (SQLAlchemy)
│   ├── config.py               # 配置管理
│   ├── api/                    # API 路由
│   │   ├── tasks.py            # 任务生命周期管理
│   │   ├── protocols.py        # 协议库 + AI 协议接入
│   │   ├── llm.py              # LLM 配置管理
│   │   └── ws.py               # WebSocket 实时推送
│   ├── engine/fuzzer.py        # AFLNet 进程管理器
│   └── llm/                    # LLM 网关
│       ├── gateway.py          # 多供应商适配
│       └── crypto.py           # AES-256-GCM 加密
├── web/                        # Vue 3 前端
│   └── src/
│       ├── views/              # 6 个页面(首页/仪表盘/协议库/历史/报告/设置)
│       └── components/         # KPI 卡片、覆盖率图表等组件
├── protocol_kb/                # 协议知识库
│   ├── index.yaml              # 协议索引
│   ├── analyzed/               # AI 分析的协议规范 (YAML)
│   ├── seeds/                  # 编译后的测试种子 (.raw)
│   └── mock_*_server.py        # 测试靶场
├── extract_imap.c              # IMAP 协议提取(RFC 9051,86 状态)
├── extract_pop3.c              # POP3 协议提取(RFC 1939)
├── extract_smtp.c              # SMTP 协议提取(RFC 5321)
├── afl-fuzz.c / aflnet.c/h     # AFLNet 模糊测试引擎核心
├── docker-compose.yml          # Docker 靶场(Dovecot + Postfix)
├── start.sh / start.bat        # 一键启动脚本
└── package.sh                  # 项目打包脚本

编译 AFLNet 引擎(可选)

预编译二进制仅适用于 Linux。如需自行编译:

# 安装依赖
sudo apt install clang graphviz-dev libcap-dev

# 编译核心
make clean all
cd llvm_mode
make

Windows/macOS 用户可使用 Docker 靶场 + Python 后端,无需编译 C 代码。Mock 模式支持在没有 AFLNet 二进制的情况下进行功能演示。

AFLNet 命令行选项

MailFuzz 继承 AFLNet 的以下核心选项,由后端自动组装:

选项 说明
-N netinfo 服务器信息(如 tcp://127.0.0.1/143
-P protocol 应用协议(IMAP / POP3 / SMTP)
-E 启用状态感知模式
-R 启用区域级变异算子
-K 发送 SIGTERM 优雅终止服务器
-D usec 服务器初始化等待时间(微秒)
-q algo 状态选择算法
-s algo 种子选择算法

常见问题

Q: 前端页面空白? A: 确认后端已启动:curl http://localhost:8080/api/health 应返回 {"status":"ok"}

Q: 提示"LLM 未配置"? A: 在设置页面配置 API Key,或留空测试意图使用预置种子——AI 种子生成是可选的。

Q: AFLNet 编译失败? A: Windows 用户使用 Docker 靶场 + Mock 模式即可,无需编译 C 代码。

Q: 如何添加新协议? A: 协议库页面 → 输入 RFC 编号 → AI 自动分析并接入。

引用

MailFuzz 基于 AFLNet 构建,如果您在研究中使用了本工具,请引用:

@inproceedings{AFLNet,
  author    = {Van{-}Thuan Pham and Marcel B{\"o}hme and Abhik Roychoudhury},
  title     = {{AFLNet:} A Greybox Fuzzer for Network Protocols},
  booktitle = {Proceedings of the 13th IEEE International Conference on
               Software Testing, Verification and Validation : Testing Tools Track},
  year      = {2020},
}

许可证

MailFuzz 继承 AFLNet 的 Apache License, Version 2.0

AFLNet 是 American Fuzzy Lop 的扩展,由 Michał Zalewski 编写并维护。

About

AI-Powered Intelligent Fuzzing Platform for Email Protocols (IMAP / POP3 / SMTP)

Resources

License

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors